<?php


class Forum {
	private $idCurso;
	private $idUsuario;
	private $idMensagemAnexo = 0;
	
	/**
	 * @constructor
	 * @classDescription Classe Vista que recebe um Registro como parametro. 
	 * @param Registro $registro
	 */
	public function Forum ($idCurso, $idUsuario){ //Construtor -------------------
		$this->idCurso = $idCurso;
		$this->idUsuario = $idUsuario;
	}
	
	public function getIdCurso(){
		return $this->idCurso;
	}
	
	public function getIdMensagemAnexo(){
		return $this->idMensagemAnexo;
	}
	
	public function getNomeTopico($idTopico){
		$strQuery = "SELECT titulo FROM forumtopicos WHERE idTopico = $idTopico";
		if(is_array($nomeTopico = BancoDados::query($strQuery))){
			return $nomeTopico[0][0];
		}
	}
	
	public function getNomeDiscussao($idDiscussao){
		$strQuery = "SELECT titulo FROM foruns WHERE idForum = $idDiscussao";
		if(is_array($nomeDiscussao = BancoDados::query($strQuery))){
			return $nomeDiscussao[0][0];
		}
	}
	
	public function getTipoCadastro($idUsuario){
		$strQuery = "SELECT tipoCadastro FROM usuarios WHERE idUsuario = '$idUsuario'";
		if(is_array($tipoCadastro = BancoDados::query($strQuery))){
			return $tipoCadastro[0][0];
		}
	}
	
	public function getNumTopicos($idDiscussao){
		$strQuery = "SELECT COUNT(*) FROM forumtopicos WHERE idForum = '$idDiscussao'";
		if(is_array($numDiscussoes = BancoDados::query($strQuery))){
			return $numDiscussoes[0][0];
		}
	}
	
	public function getNumMensagens($idTopico){
		$strQuery = "SELECT COUNT(*) FROM forumMensagens WHERE idTopico = '$idTopico'";
		if(is_array($numTopicos = BancoDados::query($strQuery))){
			return $numTopicos[0][0];
		}
	}
	
	public function getIdDiscussao($tituloDiscussao){
		$strQuery = "SELECT idForum FROM foruns WHERE idCurso = '$this->idCurso' AND titulo = '$tituloDiscussao'";
		if(is_array($idDiscussao = BancoDados::query($strQuery))){
			return $idDiscussao[0][0];
		}
	}
	
	public function getIdMensagem($idTopico){
		$strQuery = "SELECT idMensagem FROM forumMensagens WHERE idTopico = '$idTopico'";
		if(is_array($idMensagem = BancoDados::query($strQuery))){
			return $idMensagem[0][0];
		}
	}
	
	public function getNomeUsuario($idUsuario){
		$strQuery = "SELECT nome FROM usuarios WHERE idUsuario = '$idUsuario'";
		if(is_array($resultado = BancoDados::query($strQuery))){
			return $resultado[0][0];
		}
	}
	
	public function getFotoUsuario($idUsuario){
		$strQuery = "SELECT foto FROM usuarios WHERE idUsuario = '$idUsuario'";
		if(is_array($resultado = BancoDados::query($strQuery))){
			if($resultado['0']['0'] != NULL){
				$dir_img = '/146.164.104.30/var/www/constructore/imagens/usuarios/'. $resultado['0']['0'];
				//if(file_exists_real($dir_img)){
					return str_replace('original', 'medio', $resultado['0']['0']);;
				//}else
				//	return 'usuariodefault_medio.png';
			}else
				return 'usuariodefault_medio.png';
		}
	}
	
	public function getIdTopico($tituloTopico, $idDiscussao){
		
		$strQuery = "SELECT idTopico FROM forumtopicos WHERE idForum = '$idDiscussao' AND titulo = '$tituloTopico'"; 
		if(is_array($idTopico = BancoDados::query($strQuery) )){
			return $idTopico[0][0];
		}
	}
	
	
	public function inserirDiscussao($idCurso, $idUsuario, $strNome, $strTipo, $strDataIni, $strDataTer, $idForum){
		if($this->validarForum($strNome,$strTipo,$strDataIni,$strDataTer)){
			if(is_numeric($idForum)){
				$strQuery = "UPDATE foruns SET titulo = '$strNome', dataInicio = '$strDataIni', dataTermino = '$strDataTer', idUsuarioUltimaModificacao = '$idUsuario', dataHoraUltimaModificacao = NOW() WHERE idForum = $idForum";
			}else{
				$strQuery = "INSERT INTO foruns VALUES(DEFAULT, '$idCurso', '$strNome', '$strDataIni', '$strDataTer', '$strTipo', '$idUsuario', NOW(), '$idUsuario', NOW())";
			}
			if(BancoDados::query($strQuery)){
				$strQuery1 = "SELECT idForum FROM foruns ORDER BY dataHoraInsercao DESC";
				if($resultado = BancoDados::query($strQuery1)){
					if(Permissao::setPermissaoInicial($idCurso,'forum',$resultado[0][0])){
						return $resultado[0][0];
						atualizaCurso();
					}
				}else{
					return false;
				}
			}else{
				return false;
			}								
		}else{
			return false;
		}
	}
	
	public function inserirTopico($strNomeTopico, $nomeDiscussao, $strMsgTopico,$idTopico){
		
		//validar se ja existe titulo
		$idDiscussao = $this->getIdDiscussao($nomeDiscussao);
		
		if(is_numeric($idTopico)){
			$strQuery = "UPDATE forumtopicos SET titulo = '$strNomeTopico',mensagem = '$strMsgTopico', idUsuarioUltimaModificacao = '$this->idUsuario', dataHoraUltimaModificacao = NOW() WHERE idTopico = $idTopico";
			if($result = BancoDados::query($strQuery)){
				$idMensagem = $this->getIdMensagem($idTopico);
				$strQuery1	= "UPDATE forumMensagens SET mensagem = '$strMsgTopico' WHERE idMensagem = $idMensagem";
			}
			return BancoDados::query($strQuery1);
		}else{
			$strQuery = "INSERT INTO forumtopicos VALUES(DEFAULT, '$idDiscussao', '$strNomeTopico', '$strMsgTopico', '0', '$this->idUsuario', NOW(),'$this->idUsuario', NOW())";
		}
		if($result = BancoDados::query($strQuery)){
			$idTopic = $this->getIdTopico($strNomeTopico, $idDiscussao);
			$strQuery1 = "INSERT INTO forumMensagens VALUES(DEFAULT, '$idTopic', '$strMsgTopico', '$this->idUsuario', NOW(), NOW(), 'NULL')";
			atualizaCurso();
			return BancoDados::query($strQuery1);
			atualizaCurso();
		}
		
	}
	
	public function inserirMensagem($idMsgRespondida, $mensagem, $idTopico, $idMensagem){
		if(is_numeric($idMensagem)){
			$strQuery = "UPDATE forumMensagens SET idMensagemRespondida = '$idMsgRespondida', mensagem = '$mensagem', dataHoraUltimaModificacao = NOW() WHERE idMensagem = $idMensagem";
			return BancoDados::query($strQuery);
		}else{
			$strQuery = "INSERT INTO forumMensagens VALUES(DEFAULT, '$idTopico', '$mensagem', '$this->idUsuario', NOW(), NOW(), '$idMsgRespondida')";
			atualizaCurso();
			return BancoDados::query($strQuery);
		}
	}
	
	public function inserirAnexo($nome, $tamanho, $tipo, $arquivo, $idMensagem){	
		$strQuery = "INSERT INTO forumarquivos (nome, tamanho, tipo, arquivo, idMensagem) VALUES ('$nome', '$tamanho', '$tipo', '$arquivo', '$idMensagem')";
		return BancoDados::query($strQuery);
	}
	
	public function getDiscussoes($idCurso,$idForum){ // 'discussoes' no banco estão representadas pela entidade 'forums'
		
		if(is_numeric($idForum)){
			$strQuery = "SELECT * FROM foruns WHERE idForum = '$idForum'";
			if($resultado = BancoDados::query($strQuery)){
				$discussao['id'] 					 = $resultado[0]['idForum'];
				$discussao['titulo']				 = $resultado[0]['titulo'];
				$discussao['dataInicio']			 = $resultado[0]['dataInicio'];
				$discussao['dataTermino']			 = $resultado[0]['dataTermino'];
				$discussao['tipo']					 = $resultado[0]['tipo'];
				$discussao['idUsuario']				 = $resultado[0]['idUsuario'];
				$discussao['nomeUsuario']			 = $this->getNomeUsuario($resultado[0]['idUsuario']);
				$discussao['dataHoraInsercao']		 = $resultado[0]['dataHoraInsercao'];
				$discussao['idUsuarioUltimaMod']	 = $resultado[0]['idUsuarioUltimaModificacao'];
				$discussao['nomeUsuarioUltimaMod']	 = $this->getNomeUsuario($resultado[0]['idUsuarioUltimaModificacao']);
				$discussao['dataHoraUltimaMod']		 = $resultado[0]['dataHoraUltimaModificacao'];
			}
			return $discussao;
		}else 
			$strQuery = "SELECT * FROM foruns WHERE idCurso = '$idCurso'";
				if(is_array($resultado = BancoDados::query($strQuery))){
				if(count($resultado) > 0){
					foreach($resultado as $indice => $valor){
						$discussoes[$indice]['id'] = $valor['idForum'];
						$discussoes[$indice]['titulo'] = $valor['titulo'];
						$discussoes[$indice]['dataInicio'] = $valor['dataInicio'];
						$discussoes[$indice]['dataTermino'] = $valor['dataTermino'];
						$discussoes[$indice]['tipo'] = $valor['tipo'];
						$discussoes[$indice]['idUsuario'] = $valor['idUsuario'];
						$discussoes[$indice]['nomeUsuario'] = $this->getNomeUsuario($valor['idUsuario']);
						$discussoes[$indice]['dataHoraInsercao'] = $valor['dataHoraInsercao'];
						$discussoes[$indice]['idUsuarioUltimaMod'] = $valor['idUsuarioUltimaModificacao'];
						$discussoes[$indice]['nomeUsuarioUltimaMod'] = $this->getNomeUsuario($valor['idUsuarioUltimaModificacao']);
						$discussoes[$indice]['dataHoraUltimaMod'] = $valor['dataHoraUltimaModificacao'];
					}
				}
			}		
			return $discussoes;
	}
	
	public function getTopicos($tituloDiscussao, $idCurso,$idTopico){
		//lembrete: somar 1 ao numero de visualizações do tópico
		
		$tituloDiscussao = tiraPorcento($tituloDiscussao);
		$idForum = $this->getIdDiscussao($tituloDiscussao);
		if(is_numeric($idTopico)){
			$strQuery = "SELECT * FROM forumtopicos WHERE idTopico = '$idTopico'";
			if($resultado = BancoDados::query($strQuery)){
				$topicos['id'] 					 = $resultado[0]['idTopico'];
				$topicos['titulo'] 				 = $resultado[0]['titulo'];
				$topicos['mensagem']	  		 = $resultado[0]['mensagem'];
				$topicos['visualizações']		 = $resultado[0]['visualizacoes'];
				$topicos['idUsuario'] 			 = $resultado[0]['idUsuario'];
				$topicos['nomeUsuario'] 		 = $this->getNomeUsuario($resultado[0]['idUsuario']);
				$topicos['dataHoraInsercao'] 	 = $resultado[0]['dataHoraInsercao'];
				$topicos['idUsuarioUltimaMod'] 	 = $resultado[0]['idUsuarioUltimaModificacao'];
				$topicos['nomeUsuarioUltimaMod'] = $this->getNomeUsuario($resultado[0]['idUsuarioUltimaModificacao']);
				$topicos['dataHoraUltimaMod']	 = $resultado[0]['dataHoraUltimaModificacao'];
			}				
			return $topicos;		
		}else{
			$strQuery = "SELECT * FROM forumtopicos WHERE idForum = '$idForum'";
			if(is_array($resultado = BancoDados::query($strQuery))){
				if(count($resultado) > 0){
					foreach($resultado as $indice => $valor){
						$topicos[$indice]['id'] = $valor['idTopico'];
						$topicos[$indice]['titulo'] = $valor['titulo'];
						$topicos[$indice]['mensagem'] = $valor['mensagem'];
						$topicos[$indice]['visualizações'] = $valor['visualizacoes'];
						$topicos[$indice]['idUsuario'] = $valor['idUsuario'];
						$topicos[$indice]['nomeUsuario'] = $this->getNomeUsuario($valor['idUsuario']);
						$topicos[$indice]['dataHoraInsercao'] = getDataHoraFormatada($valor['dataHoraInsercao']);
						$topicos[$indice]['idUsuarioUltimaMod'] = $valor['idUsuarioUltimaModificacao'];
						$topicos[$indice]['nomeUsuarioUltimaMod'] = $this->getNomeUsuario($valor['idUsuarioUltimaModificacao']);
						$topicos[$indice]['dataHoraUltimaMod'] = getDataHoraFormatada($valor['dataHoraUltimaModificacao']);
					}
				}
			}		
			
			return $topicos;
		}
	}
	
	public function validarForum($strNome,$strTipo,$strDataIni,$strDataTer){
		$validou	=	true;
		
		if (!validaAlfaNumerico($strNome, constant('__TAM_TITULO_AVISO__'))){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_NOME'))), 'erro');	
		}
		
		if (!validaDataString($strDataIni)){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_DATA_INICIO'))), 'erro');	
		}
		
		if (!validaDataString($strDataTer)){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_DATA_TERMINO'))), 'erro');	
		}
		
		if(strtotime($strDataIni)>strtotime($strDataTer)){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_COMPARACAO_DATAS', array(texto('DADOS_INICIO'), texto('MAIOR_IGUAL'), texto('DADOS_TERMINO'))), 'erro');
		}
		
		if($strTipo == ""){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_SELECT',array(texto('DADOS_TIPO'))), 'erro');
		}
	
		return $validou;
	}
	public function getMensagens($idTopico, $idMensagem){
		
		if(is_numeric($idMensagem)){
			$strQuery = "SELECT * FROM forumMensagens WHERE idMensagem = '$idMensagem'";
			if($resultado = BancoDados::query($strQuery)){
				foreach($resultado as $indice => $valor){
					$mensagens['idMensagem'] 				= $resultado[0]['idMensagem'];
					$mensagens['idTopico'] 					= $resultado[0]['idTopico'];
					$mensagens['mensagem'] 					= $resultado[0]['mensagem'];
					$mensagens['idUsuario'] 				= $resultado[0]['idUsuario'];
					$mensagens['dataHoraInsercao']		    = $resultado[0]['dataHoraInsercao'];
					$mensagens['dataHoraUltimaModificacao'] = $resultado[0]['dataHoraUltimaModificacao'];
					$mensagens['idMensagemRespondida'] 		= $resultado[0]['idMensagemRespondida'];
					$mensagens['anexos']					= getListaAnexos($mensagens['idMensagem']);
				}
			}else
				return false;
		
		}else{
			$strQuery = "SELECT * FROM forumMensagens WHERE idTopico = '$idTopico'";
			if($resultado = BancoDados::query($strQuery)){
				if(count($resultado) > 0){
					foreach($resultado as $indice => $valor){
						$mensagens[$indice]['idMensagem'] = $valor['idMensagem'];
						$mensagens[$indice]['idTopico'] = $valor['idTopico'];
						$mensagens[$indice]['mensagem'] = $valor['mensagem'];
						$mensagens[$indice]['idUsuario'] = $valor['idUsuario'];
						$mensagens[$indice]['dataHoraInsercao'] = $valor['dataHoraInsercao'];
						$mensagens[$indice]['dataHoraUltimaModificacao'] = $valor['dataHoraUltimaModificacao'];
						$mensagens[$indice]['idMensagemRespondida'] = $valor['idMensagemRespondida'];
						$mensagens[$indice]['anexos'] = getListaAnexos($mensagens[$indice]['idMensagem']);
						//debug($mensagens[$indice]['idMensagem']);
						//die;
						// die;
						
						
					}
				}
			}else 
				return false;		
		}
		return $mensagens;
	}
	
	public function excluirDiscussao($idDiscussao){
		$strQuery = "SELECT * FROM forumtopicos WHERE idForum = '$idDiscussao'";
		
		if(count($resultado = BancoDados::query($strQuery)) > 0){
			foreach($resultado as $indice => $valor){
				if($valor['idForum'] == $idDiscussao){
					$this->excluirTopico($valor['idTopico']);
				}
			}
		}
					
		$strQuery = "DELETE FROM foruns WHERE idForum = '$idDiscussao' "; 
		if(BancoDados::query($strQuery))
			return TRUE;
	}
	
	public function excluirTopico($idTopico){
		$strQuery = "SELECT * FROM forumMensagens WHERE idTopico = '$idTopico'";
		
		if(count($resultado = BancoDados::query($strQuery)) > 0){
			foreach($resultado as $indice => $valor){
				if($valor['idTopico'] == $idTopico){
					$this->excluirMensagem($valor['idMensagem']);
				}
			}
		}
		
		$strQuery = "DELETE FROM forumtopicos WHERE idTopico = '$idTopico' "; 
		if(BancoDados::query($strQuery))
			return TRUE;
	}
	
	public function excluirMensagem($idMensagem){
		$strQuery = "DELETE FROM forumMensagens WHERE idMensagem = '$idMensagem' "; 
		if(BancoDados::query($strQuery))
			return TRUE;
	}	
	
	public static function getForuns($idCurso){
		$strQuery = "SELECT * FROM foruns WHERE idCurso = '$idCurso'";
		if($resultado = BancoDados::query($strQuery)){
			return $resultado;
		}else{
			return null;
		}
	}
	
	public static function getListaParaCurso($idCurso) {
		$resultMatrix = BancoDados::query("SELECT idForum as idItem ,idCurso, idUsuario, titulo FROM foruns WHERE idCurso = $idCurso");
		if(!empty($resultMatrix)){
			return $resultMatrix; //retorna lista de instancias de uma atividade
		} 
		else return null;
	}
	
	public function getPrimeiraMensagem($idTopico){
		$strQuery = "SELECT mensagem FROM forumtopicos WHERE idForum = $idTopico ORDER BY dataHoraInsercao LIMIT 1";
		$mensagem = BancoDados::query($strQuery);
		return $mensagem[0][0];
	}
	
	
	
}
?>